package com.general.framework.zzyy;

/**
 * 为什么wait/notify必须要和synchronized一起使用？
 * 因为wait/notify是依赖于monitor对象存在的，而monitor又依赖于synchronized，所以wait/notify必须和synchronized一起使用。
 * 如果去掉synchronized，代码会抛出 IllegalMonitorStateException 异常，而且 notify 也不能实现程序的唤醒功能了。
 */
public class WaitAndSleep {
    public static void main(String[] args) throws InterruptedException {
        Object lock = new Object();
        new Thread(() -> {
            // synchronized (lock) {
                try {
                    System.out.println("wait 之前");
                    // 调用 wait 方法
                    lock.wait();
                    System.out.println("wait 之后");
                } catch (InterruptedException e) {
                    e.printStackTrace();
                }
            // }
        }).start();

        Thread.sleep(100);
        // synchronized (lock) {
            System.out.println("执行 notify");
            // 调用 notify 方法
            lock.notify();
        // }
    }
}
